package com.huaxindata.common.map;

import android.content.Context;
import android.util.Log;

import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;

/**
 * Created by Administrator on 2017/9/21.
 * 百度定位的一个封装类来获取定位数据，使用方法如下:
 * HxLocationClient.with(context).defaultOption().start(null);
 * 使用注意：
 * 1、如果不使用默认的LocationClientOption，则自己实例化一个并调用setOption()方法
 * 2、start方法要传入监听器的实现类
 */

public class HxLocationClient {
    private LocationClient mLocationClient = null;
    private LocationClientOption mDefaultOption =null;

    public HxLocationClient(Context context) {
        mLocationClient = new LocationClient(context);
    }
    /**
     * 实例化定位client
     * @param context
     * @return
     */
    public static HxLocationClient with(Context context){
        return new HxLocationClient(context);
    }

    /**
     * 使用默认的定位参数类
     */
    public HxLocationClient defaultOption(){
        if (mDefaultOption != null) {
            mDefaultOption=null;
            return this;
        }
        mDefaultOption = new LocationClientOption();
        mDefaultOption.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
        //可选，默认高精度，设置定位模式，高精度，低功耗，仅设备

        mDefaultOption.setCoorType("bd09ll");
        //可选，默认gcj02，设置返回的定位结果坐标系

        mDefaultOption.setScanSpan(0);
        //可选，默认0，即仅定位一次，设置发起定位请求的间隔需要大于等于1000ms才是有效的

        mDefaultOption.setIsNeedAddress(true);
        //可选，设置是否需要地址信息，默认不需要

        mDefaultOption.setOpenGps(true);
        //可选，默认false,设置是否使用gps

        mDefaultOption.setLocationNotify(true);
        //可选，默认false，设置是否当GPS有效时按照1S/1次频率输出GPS结果

        mDefaultOption.setIsNeedLocationDescribe(true);
        //可选，默认false，设置是否需要位置语义化结果，可以在BDLocation.getLocationDescribe里得到，结果类似于“在北京天安门附近”

        mDefaultOption.setIsNeedLocationPoiList(true);
        //可选，默认false，设置是否需要POI结果，可以在BDLocation.getPoiList里得到

        mDefaultOption.setIgnoreKillProcess(true);
        //可选，默认true，定位SDK内部是一个SERVICE，并放到了独立进程，设置是否在stop的时候杀死这个进程，默认不杀死

        mDefaultOption.setEnableSimulateGps(false);
        //可选，默认false，设置是否需要过滤GPS仿真结果，默认需要


        mLocationClient.setLocOption(mDefaultOption);
        return this;
    }

    /**
     * 设置自定义的定位参数类
     * @param option
     * @return
     */
    public HxLocationClient setLocationOption(LocationClientOption option){
        mLocationClient.setLocOption(option);
        return this;
    }

    /**
     * 开始定位，并设置回调接口
     * @param listener
     */
    public void start(BDLocationListener listener){
        if (listener == null) {
            return;
        }
        Log.e("xxx", "xxxx====开始定位");
        mLocationClient.registerLocationListener(listener);
        mLocationClient.start();
    }
}
